﻿Imports DAL

Public Class buQuotations


    ''' <summary>
    ''' Chuyển tất cả các Quotation vào đối tượng DataTable
    ''' </summary>
    ''' <param name="hasOrdered">True: Quotation đã có đơn đặt hàng</param>
    Public Function TransferListOfQuotationsToDataTable(ByVal hasOrdered As Boolean) As DataTable

        'FUNC: Kỹ thuật ForEach trong List(Of T) kết hợp DataTable - Add DataSource vào UltraGrid
        'Khai báo một DataTable để chứa dữ liệu
        Dim dtSource As New DataTable("Quotations")

        'Khai báo một biến đối tượng DataColumn
        Dim dcQuotation As New DataColumn("QuotationID", GetType(String))

        'Thêm cột QuotationID vào DataTable
        dcQuotation.MaxLength = 256
        dcQuotation.Caption = "Mã tham chiếu"
        dtSource.Columns.Add(dcQuotation)

        'Thêm cột CustomerID vào DataTable
        dcQuotation = New DataColumn("CustomerID", GetType(Int32))
        dcQuotation.Caption = "Mã khách hàng"
        dtSource.Columns.Add(dcQuotation)

        'Thêm cột AddressID vào DataTable
        dcQuotation = New DataColumn("AddressID", GetType(Int32))
        dcQuotation.Caption = "Mã địa chỉ"
        dtSource.Columns.Add(dcQuotation)

        'Thêm cột ContactID vào DataTable
        dcQuotation = New DataColumn("ContactID", GetType(Int32))
        dcQuotation.Caption = "Mã liên hệ"
        dtSource.Columns.Add(dcQuotation)

        'Thêm cột EmployeeID vào DataTable
        dcQuotation = New DataColumn("EmployeeID", GetType(Int32))
        dcQuotation.Caption = "Mã nhân viên"
        dtSource.Columns.Add(dcQuotation)

        'Thêm cột CurrencyRate vào DataTable
        dcQuotation = New DataColumn("CurrencyRate", GetType(UInt16))
        dcQuotation.Caption = "Tỷ giá ngoại tệ"
        dtSource.Columns.Add(dcQuotation)

        'Thêm cột SPRNumber vào DataTable
        dcQuotation = New DataColumn("SPRNumber", GetType(String))
        dcQuotation.MaxLength = 50
        dcQuotation.Caption = "Số eSPR"
        dtSource.Columns.Add(dcQuotation)

        'Thêm cột PriceType vào DataTable
        dcQuotation = New DataColumn("PriceType", GetType(String))
        dcQuotation.MaxLength = 1024
        dcQuotation.Caption = "Loại giá"
        dtSource.Columns.Add(dcQuotation)

        'Thêm cột PaymentTerm vào DataTable
        dcQuotation = New DataColumn("PaymentTerm", GetType(String))
        dcQuotation.MaxLength = 2048
        dcQuotation.Caption = "Hình thức thanh toán"
        dtSource.Columns.Add(dcQuotation)

        'Thêm cột DeliveryTime vào DataTable
        dcQuotation = New DataColumn("DeliveryTime", GetType(String))
        dcQuotation.MaxLength = 50
        dcQuotation.Caption = "Thời gian giao hàng"
        dtSource.Columns.Add(dcQuotation)

        'Thêm cột WarrantyTime vào DataTable
        dcQuotation = New DataColumn("WarrantyTime", GetType(UInt16))
        dcQuotation.Caption = "Bảo hành"
        dtSource.Columns.Add(dcQuotation)

        'Thêm cột Validity vào DataTable
        dcQuotation = New DataColumn("Validity", GetType(UInt16))
        dcQuotation.Caption = "Thời hạn báo giá"
        dtSource.Columns.Add(dcQuotation)

        'Thêm cột Note vào DataTable
        dcQuotation = New DataColumn("Note", GetType(String))
        dcQuotation.Caption = "Ghi chú"
        dtSource.Columns.Add(dcQuotation)

        'Thêm cột CreatedDate vào DataTable
        dcQuotation = New DataColumn("CreatedDate", GetType(DateTime))
        dcQuotation.Caption = "Ngày lập báo giá"
        dtSource.Columns.Add(dcQuotation)

        'Thêm cột Revision vào DataTable
        dcQuotation = New DataColumn("Revision", GetType(UInt16))
        dcQuotation.Caption = "Rev."
        dtSource.Columns.Add(dcQuotation)

        'Thêm cột RowGuid vào DataTable
        dcQuotation = New DataColumn("RowGuid", GetType(Guid))
        dcQuotation.Caption = "Mã tham chiếu"
        dtSource.Columns.Add(dcQuotation)

        'Thêm cột Commission vào DataTable
        dcQuotation = New DataColumn("Commission", GetType(Single))
        dcQuotation.Caption = "Chiết khấu"
        dtSource.Columns.Add(dcQuotation)

        'Thêm cột Ordered vào DataTable
        dcQuotation = New DataColumn("Ordered", GetType(Boolean))
        dcQuotation.Caption = "Đã đặt hàng"
        dtSource.Columns.Add(dcQuotation)

        'Khai báo một biến đối tượng DataRow
        Dim drQuotation As DataRow

        Dim listOfQuotationsByHasOrder As List(Of Quotation) = RetrieveQuotationsByHasOrder(hasOrdered)

        'FUNC: Kỹ thuật lặp xuyên List(of T) - Add DataRow vào DataTable
        For Each oQuotation As Quotation In listOfQuotationsByHasOrder

            'Làm tươi lại đối tượng DataRow
            drQuotation = dtSource.NewRow()

            '0: QuotationID
            drQuotation("QuotationID") = oQuotation.QuotationId

            '1: CustomerID
            drQuotation("CustomerID") = oQuotation.CustomerId

            '2: AddressID
            If oQuotation.AddressId IsNot Nothing Then
                drQuotation("AddressID") = oQuotation.AddressId
            Else
                drQuotation("AddressID") = 0
            End If


            '3: ContactID
            If oQuotation.ContactId IsNot Nothing Then
                drQuotation("ContactID") = oQuotation.ContactId
            Else
                drQuotation("ContactID") = 0
            End If


            '4: EmployeeID
            If oQuotation.EmployeeId IsNot Nothing Then
                drQuotation("EmployeeID") = oQuotation.EmployeeId
            Else
                drQuotation("EmployeeID") = 1
            End If


            '5: CurrencyRate
            drQuotation("CurrencyRate") = oQuotation.CurrencyRate

            '6: SPRNumber
            drQuotation("SPRNumber") = oQuotation.SPRNumber

            '7: PriceType
            drQuotation("PriceType") = oQuotation.PriceType

            '8: PaymentTerm
            drQuotation("PaymentTerm") = oQuotation.PaymentTerm

            '9: DeliveryTime
            drQuotation("DeliveryTime") = oQuotation.DeliveryTime

            '10: WarrantyTime
            drQuotation("WarrantyTime") = oQuotation.WarrantyTime

            '11: Validity
            drQuotation("Validity") = oQuotation.Validity

            '12: Note
            drQuotation("Note") = oQuotation.Note

            '13: CreatedDate
            drQuotation("CreatedDate") = oQuotation.CreatedDate

            '14: Revision
            drQuotation("Revision") = oQuotation.Revision

            '15: RowGuid
            drQuotation("RowGuid") = oQuotation.RowGuid

            '16: Commission
            drQuotation("Commission") = oQuotation.Commission

            '17: Ordered
            drQuotation("Ordered") = oQuotation.Ordered

            'Thêm hàng vào DataTable
            dtSource.Rows.Add(drQuotation)

        Next

        Return dtSource

    End Function


    ''' <summary>
    ''' Truy vấn tất cả các Quotation
    ''' </summary>
    ''' <param name="hasOrdered">True: Quotation đã có đơn đặt hàng</param>
    Public Function RetrieveQuotationsByHasOrder(ByVal hasOrdered As Boolean) As List(Of Quotation)

        Using dbEntities As New PrestozEntities

            Return dbEntities.Quotations.Where(Function(c) c.Ordered = hasOrdered).ToList()

        End Using

    End Function

    
End Class
